package com.delio.client.pagos.asistencias;

import java.util.Date;

import com.delio.client.idioma.DelioConstants;

import com.delio.client.util.MensajeData;
import com.delio.client.util.Utilities;
import com.extjs.gxt.ui.client.data.BaseFilterPagingLoadConfig;
import com.extjs.gxt.ui.client.data.BasePagingLoadConfig;
import com.extjs.gxt.ui.client.data.BasePagingLoader;
import com.extjs.gxt.ui.client.data.BeanModel;
import com.extjs.gxt.ui.client.data.BeanModelReader;
import com.extjs.gxt.ui.client.data.FilterPagingLoadConfig;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.data.PagingLoadResult;
import com.extjs.gxt.ui.client.data.PagingLoader;
import com.extjs.gxt.ui.client.data.RpcProxy;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;

public class Asistencias {

	private static AsistenciaServiceAsync ms = GWT.create(AsistenciaService.class);
	private static DelioConstants k = GWT.create(DelioConstants.class);

	public static ListStore<BeanModel> store;
	public static PagingLoader<PagingLoadResult<ModelData>> loader;

	public static Integer asistencia_id;
	public static PanelNuevaAsistencia panelnuevaasistencia;

	public static String filter;
	
	public static Integer turno_id;
	public static Integer contrato_id;
	public static Date fecha_consulta;
	public static Boolean condicion;
	
	public static Boolean valor;
	public static Date fecha;;

	public static void getPaginate() {
		RpcProxy<PagingLoadResult<Asistencia>> proxy = new RpcProxy<PagingLoadResult<Asistencia>>() {

			@Override
			protected void load(Object loadConfig,	AsyncCallback<PagingLoadResult<Asistencia>> callback) {
				ms.paginateAsistencia((FilterPagingLoadConfig) loadConfig,
						filter,turno_id,fecha_consulta,condicion, callback);
			}
		};

		loader = new BasePagingLoader<PagingLoadResult<ModelData>>(proxy,
				new BeanModelReader()) {

			protected Object newLoadConfig() {
				BasePagingLoadConfig config = new BaseFilterPagingLoadConfig();
				return config;
			}

		};

		loader.setRemoteSort(true);
		store = new ListStore<BeanModel>(loader);

	}

	public static void Save(Asistencia emp) {
		asistencia_id = emp.getId();
	    emp.setContrato_id(contrato_id);
		ms.save(emp, new AsyncCallback<MensajeData>() {

			@Override
			public void onFailure(Throwable caught) {
				MessageBox.alert(k.sistemaDelio(), k.errorConexion(), null);
			}

			@Override
			public void onSuccess(MensajeData result) {
				
			
				if (result.guardado) {
				
					if (asistencia_id != null)
						store.rejectChanges();
					else
						loader.load(0, Utilities.itemsPerPage);

					
					panelnuevaasistencia.reset();

				} else 
					MessageBox.alert(k.sistemaDelio(),k.asistenciaNoGuardada(), null);
				
			}
		});

	}

	public static void delete(Integer id) {
		ms.delete(id, new AsyncCallback<MensajeData>() {

			@Override
			public void onSuccess(MensajeData result) {
				if (result.guardado) {
					Integer offset = loader.getOffset();
					loader.load(offset, Utilities.itemsPerPage);
				} 
				else
					MessageBox.alert(k.sistemaDelio(), k.asistenciaNoEliminado(),
							null);

			}

			@Override
			public void onFailure(Throwable caught) {
				MessageBox.alert(k.sistemaDelio(), k.errorConexion(), null);

			}
		});

	}

	public static void deleteAll(String ids) {
		ms.deleteAll(ids, new AsyncCallback<MensajeData>() {

			@Override
			public void onSuccess(MensajeData result) {
				if (result.guardado) {
					Integer offset = loader.getOffset();
					loader.load(offset, Utilities.itemsPerPage);
				} 
				else
					MessageBox.alert(k.sistemaDelio(), k.asistenciaNoEliminados(),null);

			}

			@Override
			public void onFailure(Throwable caught) {
				MessageBox.alert(k.sistemaDelio(), k.errorConexion(), null);

			}
		});

	}
	
	public static void setAsistencia(){
		ms.setAsistenciaVarios(fecha, valor,new AsyncCallback<Void>() {
			
			@Override
			public void onSuccess(Void result) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void onFailure(Throwable caught) {
				// TODO Auto-generated method stub
				
			}
		});
		
	}
}
